This is a modified version of the Scrolling Demo that demonstrates the Circular Scrolling routines. I didn't really have to change very much to get it to do circular scrolling. The main change was setting the number of tileMap rows and columns to 96 and 144. That was, they would be evenly divisible by the offscreen area (640x480), as required by the Circular Scrolling routines. (96x40 = 3840 pixels vertically in our virtual world; 3840 / 480 = 8 offscreen vertical lengths. 144x40 = 5760 pixels horizontally in our virtual world; 5760 / 640 = 9 offscreen horizontal lengths.)
When running the demo, the numeric keypad controls the screen scrolling, while the arrows control the ball. Whenever the randomly moving balls collide with one another, they light up, demonstrating how the SWCollideCircularSpriteLayer routine still works properly even when one or both of the sprites in collision are hanging off one side of the circular world and being wrapped onto the other side.
If the demo runs slowly, it's because collision detection is enabled for all 100 balls. This means each one of the 100 balls has to be checked with each of the others every single frame, which can slow down things considerably on slower Macs. Either reduce the number of balls or comment out the SWCollideCircularSpriteLayer calls in RunAnimation if things are running too slowly for your taste.
I also threw in some scaling stuff to make sure the scaling routines worked with a scrolling world. The demo starts out with a "Zoom Out" effect, which you can turn off if it's too slow on your Mac. Once the demo is running, you can scale the ball sprites on the fly with the - and + keys. Hit return to return the balls to their original size. This only works in 8 or 16 bits, however.